package com.kele.dao;

import com.kele.domain.User;
import com.kele.domain.messages;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 创作人 王箫凯
 * Date 2021/6/14
 * Time 16:01
 *
 * @author 王箫凯
 */
public interface MessageDao {

    //创建聊天室

    /**
     * 创建聊天室
     * @param account 创建聊天室的账号
     * @param roomNumber 房间号
     * @return 返回数字
     */
    int createChatRoom(@Param("account") String account,@Param("roomNumber") String roomNumber);

    /**
     * 邀请其他用户加入
     * @param invitedAccount 被邀请的账号
     * @param roomNumber 房间号
     * @param code 状态码，如果为0表示正在考虑，如果为1表示同意，如果为2表示拒绝
     * @return 返回一个数据如果>0可能就是加入成功
     */
    int invitedUserJoin(@Param("invitedAccount") String invitedAccount,@Param("roomNumber") String roomNumber,@Param("code") int code);

    /**
     * 对邀请进行操作
     * @param account 账号，一般进行操作的为本人，通过session进行操作
     * @param code 状态码，如果为1 则表示接受申请，为2标识拒绝申请
     * @param roomNumber 房间号码，具有唯一性
     * @return 返回一个数据
     */
    int doInvited(@Param("account")String account,
                  @Param("roomNumber")String roomNumber,
                  @Param("code") int code);

    /**
     * 浏览自己的聊天室
     * @param account 表示需要浏览的账号
     * @return 返回一个集合， 可能是自己的所有聊天，也可能是自己单独的聊天
     */
    List<messages> myMessages(@Param("account") String account);

    /**
     * 根据房间号找到另一个人
     * @param roomNumber
     * @param otherAccount
     * @return
     */
    messages selectByRoomNumber(@Param("roomNumber")String roomNumber,@Param("otherAccount")String otherAccount);

    /**
     * 发送消息
     * @param message 消息内容
     * @param roomNumber 房间号
     * @param myAccount 我的账号
     * @param myNickName 我的昵称
     * @return 返回一个数据，如果为1 则表示发送成功
     */
    int sendMessages(@Param("sendMessages") String message,@Param("roomNumber") String roomNumber,
                     @Param("myAccount") String myAccount,@Param("myNickName") String myNickName);

    /**
     * 根据房间号 和用户账号去寻找这个对话是否存在
     * @param account 账号
     * @param roomNumber 房间号码
     * @return 返回一个数字，如果为1 则表示存在，反之，则表示不存在
     */
    int selectRoom(@Param("account")String account,@Param("roomNumber") String roomNumber);

    /**
     * 找到自己的聊天记录
     * @param roomNumber 房间号
     * @param account 自己的账号
     * @return 返回一个集合，这个集合包含所有的消息，根据thymeleaf进行遍历，如果account 于自己的相等，放在右侧，反之放在
     * 左侧，呈现出聊天记录的形式
     */
    List<messages> selectMessagesWith(@Param("roomNumber") String roomNumber,
                                      @Param("account") String account);

    /**
     * 删除这个聊天室
     * @param roomNumber 房间号
     * @param account 自己的账号
     * @return 返回一个数据，如果是1 则表示清除成功
     */
    int deleteMessageRoom(@Param("roomNumber") String roomNumber,@Param("account") String account);

    /**
     * 通过输入账户房间名找到一个单独的申请，如果该申请状态码为1 或者2 则表示已经进行过处理了，则会对这个处理进行拦截
     * @param account 账号
     * @param roomNumber 房间号
     * @return 返回一个数据
     */
    int invitedCode(@Param("account") String account,@Param("roomNumber") String roomNumber);
}
